package Strategy;

import Factory.AgriculturalMachine;
import Factory.MachineType;
import Observer.EnvironmentData;

// 温度异常时的作业策略（过高或过低）
public class TemperatureStrategy implements OperationStrategy {
    private static final double HIGH_TEMP_THRESHOLD = 35;  // 高温阈值
    private static final double LOW_TEMP_THRESHOLD = 5;   // 低温阈值

    @Override
    public void adjust(AgriculturalMachine machine, EnvironmentData data) {
        double temperature = data.getTemperature();

        if (temperature > HIGH_TEMP_THRESHOLD) {
            handleHighTemperature(machine, temperature);
        } else if (temperature < LOW_TEMP_THRESHOLD) {
            handleLowTemperature(machine, temperature);
        } else {
            // 温度正常，使用标准策略
            System.out.println(machine.getType() + " 温度正常（" + temperature + "℃），使用标准作业策略");
        }
    }

    private void handleHighTemperature(AgriculturalMachine machine, double temperature) {
        switch (machine.getType()) {
            case HARVESTER:
                System.out.println(machine.getType() + " 检测到高温（" + temperature + "℃），已调整收割策略");
                // 具体逻辑：降低作业速度，增加冷却系统使用
                break;
            case SPRAYER:
                System.out.println(machine.getType() + " 检测到高温（" + temperature + "℃），已调整喷洒时间");
                // 具体逻辑：避免在高温时段喷洒，防止水分过快蒸发
                break;
            case SEEDER:
                System.out.println(machine.getType() + " 检测到高温（" + temperature + "℃），已调整播种深度");
                // 具体逻辑：增加播种深度，保护种子免受高温影响
                break;
            case TRACTOR:
                System.out.println(machine.getType() + " 检测到高温（" + temperature + "℃），已调整发动机冷却系统");
                // 具体逻辑：加强发动机冷却，防止过热
                break;
        }
    }

    private void handleLowTemperature(AgriculturalMachine machine, double temperature) {
        switch (machine.getType()) {
            case HARVESTER:
                System.out.println(machine.getType() + " 检测到低温（" + temperature + "℃），已预热设备");
                // 具体逻辑：启动前预热，防止机械部件冻结
                break;
            case SPRAYER:
                System.out.println(machine.getType() + " 检测到低温（" + temperature + "℃），已更换抗冻剂");
                // 具体逻辑：使用抗冻剂，防止液体冻结
                break;
            case SEEDER:
                System.out.println(machine.getType() + " 检测到低温（" + temperature + "℃），已调整播种策略");
                // 具体逻辑：可能需要调整播种时间或种子类型
                break;
            case TRACTOR:
                System.out.println(machine.getType() + " 检测到低温（" + temperature + "℃），已使用冬季燃油");
                // 具体逻辑：使用适合低温的燃油，确保发动机正常启动
                break;
        }
    }
}